﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using DomainDriver.CommonUtilities.Reflectors;
using DomainDriver.DomainModeling.Constraints;
using DomainDriver.DomainModeling.DataProviders;
using DomainDriver.DomainModeling.Queries;
using DomainDriver.DomainModeling.Repositories;
using DomainDriver.DomainModeling.Example;
using DomainDriver.DomainModeling.Example.DomainObjects;
using DomainDriver.DomainModeling.GenericUnitTesting.Repositories;

namespace DomainDriver.DomainModeling.UnitTests.Repositories
{
    [TestFixture(new object[] { DataSourcePersistenceType.None })]
    [TestFixture(new object[] { DataSourcePersistenceType.File })]
    [TestFixture(new object[] { DataSourcePersistenceType.Database })]
    public class SingletonDomainObjectRepositoryTests : RepositoryTestFixture<ExampleDomainModel, Guid, SingletonDomainObject>
    {
        public SingletonDomainObjectRepositoryTests(DataSourcePersistenceType persistenceType)
            : base(persistenceType)
        {
            // do nothing
        }

        protected override ExampleDomainModel CreateDomainModel(DataSourcePersistenceType persistenceType, bool buildModelWithConstraints)
        {
            ExampleDomainModel model = new ExampleDomainModel(persistenceType, buildModelWithConstraints);
            return model;
        }

        protected override SingletonDomainObject CreateDomainObject()
        {
            SingletonDomainObject domainObject = new SingletonDomainObject();
            domainObject.SelectedEnumerationDomainObjectId = null;
            return domainObject;
        }

        protected override void UpdateDomainObject(SingletonDomainObject domainObject, ref bool objectCanBeUpdated)
        {
            objectCanBeUpdated = true;
            domainObject.SelectedEnumerationDomainObjectId = 0;
        }
    }
}